; pancake-os
; TAB=4
		CYLS	EQU		10	
		ORG		0x7c00			; 

		jmp		entry
		DB		0x90            ;
		DB		"HELLOIPL"		; 启动区名称,可以是任意的字符串（8字节）
		DW		512				; 扇区大小(必须为512B)
		DB		1				; 簇(cluster)的大小 (必须为1个扇区)
		DW		1				; FAT的起始位置(一般从第一个扇区开始)
		DB		2				; FAT的个数(必须为2)
		DW		224				; 根目录的大小（一般设置为224项）
		DW		2880			; 磁盘的大小（必须是2880扇区）
		DB		0xf0			; 磁盘的种类 （必须是0xf0）
		DW		9				; FAT的长度（必须为9扇区）
		DW		18				; 1个磁道有几个扇区（必须为18）
		DW		2				; 磁头数（必须为2）
		DD		0				; 不使用分区（必须为0）
		DD		2880			; 重写一次磁盘大小
		DB		0,0,0x29		; 不明
		DD		0xffffffff		; 可能是卷标号码
		DB		"PANCAKE-OS   "	; 磁盘名称（11字节，必须空格补齐）
		DB		"FAT12   "		; 磁盘格式名称（8字节  补齐）
		RESB	18				; 先空出18字节

; 上面是对生成的img文件的一种格式规范 ，表示这是fat12格式的系统

entry:
; 初始化寄存器
		mov		ax,0			
		MOV		ss,AX
		MOV		sp,0x7c00
		MOV		DS,AX
		MOV		ES,AX


;下面开始加载磁盘中的系统

       mov ax ,0x0820 ;   0x7c00 - 0x7dff为引导区无法使用,0x7e00之后随意
       mov es,ax  ;段基址X16（2的4次）+变址为目的地址,如[es:si]的方式，所以是从0x8200开始 
       mov ch,0 ;柱面0
       mov cl,2 ;扇区2  扇区1存储着IPL
       mov dh,0 ;磁头0
       mov si ,0 ;用来记录load失败次数  
load:
	 mov ah,0x02  ;AH=0x02表示读盘
       mov al,1 ;一个扇区
       mov bx,0 ; 基址 ，INT13h 指定ES:BX为加载的缓存区
       mov dl,0x00 ;A驱动器
       INT 0x13 ;调用磁盘BIOS
       JNC next ;成功则加载下一扇区  ,如果中断出错，carry位会置为1,错误号码会置于AH中
		
	;失败，累加一次   
       add si,1  
    ;是否失败5次了
       CMP si ,5  
       JAE  error ;
	;还没失败5次
       mov ah,0x00;系统复位
       mov dl,0x00
       INT 13h 
       JMP load   
next:
	;扇区选择(18次)
	 mov ax,es
	 add ax,0x20 ; 加上512/16B ,跳到下一个扇区的保存地址
	 mov es,ax
	 mov si,0
	 add cl,1
	 CMP cl,18    
	 JBE load
	 ;磁头选择，2次
	 mov cl,1
	 add dh,1
	 CMP dh ,1 
	 JBE load 
	 ;柱面选择 ,设定只加载10个柱面
	 mov cl,1
	 mov dh,0
	 add ch ,1
	 CMP ch ,CYLS
	 JB load 


		MOV		[0x0ff0],CH	; 把柱面数放在0x0ff0地址上
		JMP		0xc200 ;跳转到c200

fin:
		HLT						; 
		JMP		fin				; 

error: 

		mov si ,msg ; msg用于存储出错信息
		JMP loop 

loop:						    ;循环打印字符
    mov al,[si]
    add si,1
    CMP al,0 	
    JE fin
    
    mov ah ,0eh
    mov bx ,15
    int 10h

    jmp loop


msg:
		DB		0x0a, 0x0a		; 
		DB		"loading  error "
		DB		0x0a			; 
		DB		0

		RESB	0x7dfe-$		; 

		DB		0x55, 0xaa

;





